<?php defined('BASEPATH') OR exit('No direct script access allowed');

if ( ! class_exists('Controller'))
{
	class Controller extends CI_Controller {}
}
/**
 * Clase para toda las reglas de validacion del usuario
 *
 * 
 * @author jkroz
*/
class Usuarios extends Controller
{
        
        function __construct()
        {
            parent::Controller();

            $this->load->helper('html');
            $this->load->helper(array('url', 'form'));
            $this->load->library('session');
            $this->load->library('autenticacion');
            $this->load->model( 'usuarios/modulo_usuarios' );
            $this->tables  = $this->config->item('tables', 'ion_auth');

        }

        /**
        * Index que redirige segun session de usuario
        */
        function index(){

            if ( ! $this->autenticacion->logged_in() ){

                $this->load->view('principal_login');

            }else{
                /**
                * Usuario logeado es administrador
                */
                if( $this->autenticacion->is_admin() ){
                    $this->load->view('login/menu_admin');
                }else{
                    $this->load->view('login/menu_publicador');
                }

            }
        }

        /**
        * Formulario de LOGIN Administrador
        */
        function login_adm(){

            $this->load->library('form_validation');

            $this->form_validation->set_rules('nombre', 'nombre', 'required|trim|min_length[3]');
            $this->form_validation->set_rules('password', 'contraseña', 'required');

            $this->form_validation->set_message('required', 'Debe introducir el campo %s');
            $this->form_validation->set_message('min_length', 'El campo %s debe ser de al menos %s carácteres');

            /**
            * validando formulario
            */
            if( $this->form_validation->run()==FALSE ){
                /*
                *  si usuario esta LOGEADO y es ADMINISTRADOR
                */
                if( $this->autenticacion->logged_in() && $this->autenticacion->is_admin() ){
                    $this->load->view('login/menu_admin');
                }else{
                    $this->load->view('login/login_administrador');
                }

            }else{

                if ( ! $this->autenticacion->logged_in() ) {
                    /**
                    * si usuario no esta logeado -> autentificar usuario y guardar en session
                    */
                    if($this->autenticacion->login($this->input->post('nombre'),$this->input->post('password'),$this->tables['usr_adm'],'admin')){

                        $this->session->set_flashdata('message', $this->autenticacion->messages());
                        $this->load->view('login/menu_admin');

                    }else{
                        redirect('usuarios', 'refresh');
                    }
                }else{
                    redirect('usuarios', 'refresh');
                }

            }

        }

        /**
        * Formulario de login Publicador
        */
        function login_pbl(){

            $this->load->library('form_validation');

            $this->form_validation->set_rules('nombre', 'nombre', 'required|trim|min_length[3]');
            $this->form_validation->set_rules('password', 'contraseña', 'required');

            $this->form_validation->set_message('required', 'Debe introducir el campo %s');
            $this->form_validation->set_message('min_length', 'El campo %s debe ser de al menos %s carácteres');

            /**
            * validando formulario
            */
            if( $this->form_validation->run()==FALSE ){
                /*
                *  si usuario esta LOGEADO y es distinto a ADMINISTRADOR
                */
                if( $this->autenticacion->logged_in() && ! $this->autenticacion->is_admin() ){
                    $this->load->view('login/menu_publicador');
                }else{
                    $this->load->view('login/login_publicador');
                }
            }else{

                if ( ! $this->autenticacion->logged_in() ){

                    if($this->autenticacion->login($this->input->post('nombre'),$this->input->post('password'),$this->tables['usr_pbl'],'publc' ) ){

                        $this->session->set_flashdata('message', $this->autenticacion->messages());
                        $this->load->view('login/menu_publicador');

                    }else{
                        redirect('usuarios', 'refresh');
                    }
                    
                }else{
                    redirect('usuarios', 'refresh');
                }

            }

        }

        function logout()
        {
            $this->data['title'] = "Logout";
            //eliminando session del usuario
            $logout = $this->autenticacion->logout();
            //redireccionando al index inicial de la aplicacion
            redirect('usuarios', 'refresh');
        }


        /**
        * cargar vista agregar formulario publicador
        */
        function view_publicador(){

            //validacion de usuario en session
            if (!$this->autenticacion->logged_in() ){
                redirect('usuarios', 'refresh');
            }

            $this->load->view('mantenedores/agregar_staff');
        }
        /**
        * cargar vista menu administrador
        */
        function view_volver_menu_admin(){

            if (!$this->autenticacion->logged_in() ){
                redirect('usuarios', 'refresh');
            }

            $this->load->view('login/menu_admin');
        }

        /**
        * agrega usuario publicador
        *
        */
        function agregar_usuario_publicador(){

            $this->load->library('form_validation');
            /**
            * validacion datos del usuario publicador
            */
            $this->form_validation->set_rules('user_name', 'nombre usuario', 'required|trim|min_length[3]');
            $this->form_validation->set_rules('password', 'contraseña', 'required');
            $this->form_validation->set_rules('full_name', 'nombre completo', 'required');
            $this->form_validation->set_rules('full_last_name', 'apellidos', 'required');
            $this->form_validation->set_rules('telefono', 'Telefono', 'required');
            $this->form_validation->set_rules('direccion', 'Direccion', 'required');
            $this->form_validation->set_rules('email', 'correo electrónico', 'required|valid_email|trim');

            $this->form_validation->set_message('required', 'Debe introducir el campo %s');
            $this->form_validation->set_message('min_length', 'El campo %s debe ser de al menos %s carácteres');
            $this->form_validation->set_message('valid_email', 'Debe escribir una dirección de email correcta');
            $this->form_validation->set_message('matches', 'Los campos %s y %s no coinciden');


            if($this->form_validation->run()==TRUE){

                if( !empty( $_POST ) ) {

                    $data = array();
                    $data['nombre_usuario']     = $this->input->post( 'user_name');
                    $data['password']           = $this->input->post( 'password');
                    $data['nombres']            = $this->input->post( 'full_name');
                    $data['apellidos']          = $this->input->post( 'full_last_name');
                    $data['email']              = $this->input->post( 'email');
                    $data['id_administrador']   = $this->session->userdata('id');
                    $data['direccion']          = $this->input->post( 'direccion');
                    $data['telefono']           = $this->input->post( 'telefono');
                    $data['estado']             = $this->input->post( 'estado');
                    $data['descripcion']        = $this->input->post( 'descripcion');
                    $data['fecha_creacion']     = date("Y-m-d");
                    // call model
                    $id_insert = $this->modulo_usuarios->agregar_usuario_publicador($data);

                    if(!empty ($id_insert)){
                        //echo '<script>alert("Usuario agregado correctamente");</script>';
                    }else{
                        echo '<script>alert("Error! al guardar usuario");</script>';
                    }
                }
            }

            redirect('usuarios', 'refresh');

        }

        /**
        *
        *
        */
        function publicador(){
            
            $this->load->library('form_validation');

            $this->form_validation->set_rules('nombre', 'nombre', 'required|trim|min_length[5]');
            $this->form_validation->set_rules('password', 'contraseña', 'required');

            $this->form_validation->set_message('required', 'Debe introducir el campo %s');
            $this->form_validation->set_message('min_length', 'El campo %s debe ser de al menos %s carácteres');


            if($this->form_validation->run()==FALSE){
                $this->load->view('login/login_publicador');
            }else{
                if( !empty( $_POST ) ) {
                    $row = $this->modulo_usuarios->autenticacion_usuario_publicador();
                    if(count($row)!=0){
                        $data = array();
                        $data['logged_in_publ'] = true;
                        $data['id_publ_session'] = $row['id'];
                        $data['name_publ_session'] = $row['nombres'];
                        $data['last_name_publ_session'] = $row['apellidos'];
                        $this->session->set_userdata($data);
                        $this->load->view('login/menu_publicador');

                    }else{
                        $this->load->view('login/login_publicador');
                    }
                }else{
                    // Vista Login Administrador
                    $this->load->view('login/login_publicador');

                }
            }
        }

        function lista_usuarios_publicadores(){

            $this->load->library("templator");
            $this->load->library("pagination");

            $viewName = "mantenedores/lista_staff";
            $viewData['query_users'] = $this->modulo_usuarios->buscar_usuarios_publicadores();

            $this->templator->template_sin_buscador($viewName, $viewData);
            
        }

        function form_editar(){

            if( !empty( $_POST ) ) {
                
                $id = $this->input->post( 'id');
                
                if( $this->input->post('editar') == 'ver' ){
                    $this->edit_publicador($id);
                }else{
                    $this->remove_publicador($id);
                }
            }
            
        }

        function edit_publicador($id){
            
            $this->load->library("templator");
            $this->load->library("pagination");

            $viewName = "mantenedores/edit_staff";
            
            if ( $this->autenticacion->logged_in() ){
                $viewData['publicador'] = $this->modulo_usuarios->buscar_usuarios_publicadores_by_id($id);
            }else{
                redirect('usuarios','refresh');
            }

            $this->templator->template_sin_buscador($viewName, $viewData);

        }

        function remove_publicador($id){

            if ( $this->autenticacion->logged_in() ){

                $this->modulo_usuarios->eliminar_publicador($id);
               
                redirect('usuarios/lista_usuarios_publicadores','refresh');

            }else{

                redirect('usuarios','refresh');

            }
        }

        function editar(){


            $this->load->library('form_validation');
            /**
            * validacion datos del usuario publicador
            */
            $this->form_validation->set_rules('user_name', 'nombre usuario', 'required|trim|min_length[3]');
            $this->form_validation->set_rules('password', 'contraseña', 'required');
            $this->form_validation->set_rules('full_name', 'nombre completo', 'required');
            $this->form_validation->set_rules('full_last_name', 'apellidos', 'required');
            $this->form_validation->set_rules('telefono', 'Telefono', 'required');
            $this->form_validation->set_rules('direccion', 'Direccion', 'required');
            $this->form_validation->set_rules('email', 'correo electrónico', 'required|valid_email|trim');

            $this->form_validation->set_message('required', 'Debe introducir el campo %s');
            $this->form_validation->set_message('min_length', 'El campo %s debe ser de al menos %s carácteres');
            $this->form_validation->set_message('valid_email', 'Debe escribir una dirección de email correcta');
            $this->form_validation->set_message('matches', 'Los campos %s y %s no coinciden');


            if($this->form_validation->run()==TRUE){

                if( !empty( $_POST ) ) {

                    $data = array();
                    $data['id']             = $this->input->post( 'id');
                    $data['nombre_usuario'] = $this->input->post( 'user_name');
                    $data['password']       = $this->input->post( 'password');
                    $data['nombres']        = $this->input->post( 'full_name');
                    $data['apellidos']      = $this->input->post( 'full_last_name');
                    $data['email']          = $this->input->post( 'email');
                    $data['direccion']      = $this->input->post( 'direccion');
                    $data['telefono']       = $this->input->post( 'telefono');
                    $data['estado']         = $this->input->post( 'estado');
                    $data['descripcion']    = $this->input->post( 'descripcion');

                    $this->modulo_usuarios->editar_publicador($data);

                    echo '<script>alert("Usuario editado correctamente");</script>';

                }
            }

            redirect('usuarios/lista_usuarios_publicadores', 'refresh');

        }

}

?>
